

let grouped = {
  '2': [
    { name: '2', value: 3, 终点设备名称: '设备A', 起点设备名称: '设备C' },
    { name: '2', value: 10, 终点设备名称: '设备E', 起点设备名称: '设备D' }
  ],
  '1': [
    { name: '1', value: 2, 终点设备名称: '设备A', 起点设备名称: '设备B' },
    { name: '1', value: 9, 终点设备名称: '设备C', 起点设备名称: '设备A' }
  ],
  '3': [
    { name: '3', value: 4, 终点设备名称: '设备D', 起点设备名称: '设备E' },
    { name: '3', value: 7, 终点设备名称: '设备G', 起点设备名称: '设备F' }
  ]
};

// 获取分组对象的键数组
let keys = Object.keys(grouped);

// 创建一个空数组来存储排序后的分组
let sortedGroups = [];

// 选择一个起始分组
let currentGroup = grouped[keys[0]];
sortedGroups = sortedGroups.concat(currentGroup);

// 查找下一个分组，直到所有分组都被添加到sortedGroups中
while (sortedGroups.length < keys.length * 2) { // 乘以2是因为每个分组有两个元素
  let lastItem = sortedGroups[sortedGroups.length - 1];
  let nextGroupFound = false;

  keys.forEach(key => {
    let group = grouped[key];
    let firstItem = group[0];
    if (lastItem.终点设备名称 === firstItem.起点设备名称) {
      currentGroup = group;
      sortedGroups = sortedGroups.concat(currentGroup);
      nextGroupFound = true;
    }
  });

  // 如果没有找到下一个分组，说明无法首尾相连，可以中断循环
  if (!nextGroupFound) {
    break;
  }
}

console.log(sortedGroups);
